import java.util.Arrays;

public class Array_copy {

    public static int[] copy1(int[] arr) {
        int[] tmp=new int[arr.length];
        for(int i=0;i<arr.length;i++) {
            tmp[i]=arr[i];
        }
        return tmp;
    }

    public static void main(String[] args) {
        int[] arr={1,2,3,4,5};
        int[] copy=Arrays.copyOfRange(arr,2,13);//后两个参数左闭右开，[2,3)只有下标为2的一个元素
        //如果最后一个参数超过了被拷贝数组的长度，那么补零
        System.out.println(Arrays.toString(copy));

    }

    public static void main3(String[] args) {
        int[] arr={1,2,3,4,5};
        int[] copy=new int[arr.length];
        System.arraycopy(arr,0,copy,0,arr.length);
        System.out.println(Arrays.toString(copy));
    }

    //jav中提供的拷贝方法
    public static void main2(String[] args) {
        int[] arr={1,2,3,4};
        /**
         * 参数1 代表要拷贝的数组
         * 参数2 代表你要拷贝的数组长度
         * 当参数2为数组长度的倍数时，此时这个方法可以看做是扩容
         */
        int[] copy=Arrays.copyOf(arr,arr.length*2);
        System.out.println(Arrays.toString(copy));
    }

    public static void main1(String[] args) {
        int[] array={1,2,3,4,5};
        int[] copy=copy1(array);//copy是真正的拷贝
        System.out.println(Arrays.toString(copy));

        //以下的不叫拷贝,其实只有一份数据
        int[] copy2=array;
        System.out.println(Arrays.toString(copy2));
    }
}
